///@file MVDataDefines.h 定义所有的公用枚举类型以及常量
#ifndef _MVDATA_DEFINES_H_
#define _MVDATA_DEFINES_H_

///@TODO 支持版本识别
extern const unsigned int MVDATA_MAJOR_VERSION;		///< MVData 数据格式主版本号
extern const unsigned int MVDATA_MINOR_VERSION;		///< MVData 数据格式次版本号
extern const char * MVDATA_VERSION_STRING;			///< MVData 数据格式字符串格式


///@brief 定义Frame的类型
enum TYPE_FRAME
{
	TYPE_FRAME_P_SLICE			= 0,	///< P 帧
	TYPE_FRAME_I_SLICE			= 1,	///< I 帧
	TYPE_FRAME_B_SLICE			= 2,	///< B 帧
	TYPE_FRAME_MAX				= 3,	///< 表明此类型的最大范围
	TYPE_FRAME_NO_USE			= 3		///< 在程序中使用时表示出错
};

///@brief 持久化方法类型
enum TYPE_MVDATA_STORE
{
	TYPE_MVDATA_XML			= 0,	///< XML文件方式，建立的文件名为Open和CreateNew中的dataname参数
	TYPE_MVDATA_DATABASE	= 1,	///< 数据库方式，未实现
	TYPE_MVDATA_MAX			= 2,	///< 此类别中的最大值
	TYPE_MVDATA_NO_USE			= 2		///< 在程序中出现表示出错
};


/// @brief 定义Macro Block的类型
enum TYPE_MB
{
	TYPE_MB_SKIP		= 0,
	TYPE_MB_P16x16		= 1,
	TYPE_MB_P16x8		= 2,
	TYPE_MB_P8x16		= 3,
	TYPE_MB_P8x8		= 4,
	TYPE_MB_I4MB		= 5,
	TYPE_MB_I16MB		= 6,
	TYPE_MB_MAX			= 7,	///< 表明此类型的最大范围
	TYPE_MB_NO_USE		= 7		///< 在程序中使用时表示出错
};

/// @brief 定义Sub Macro Block的类型
enum TYPE_SUB_MB
{
	TYPE_SUB_MB_8x8		= 0,
	TYPE_SUB_MB_8x4		= 1,
	TYPE_SUB_MB_4x8		= 2,
	TYPE_SUB_MB_4x4		= 3,
	TYPE_SUB_MB_MAX		= 4,	///< 表明此类型的最大范围，在程序中使用时表示出错
	TYPE_SUB_MB_NO_USE	= 4		///< 表明此类型的最大范围，在程序中使用时表示出错
};

///@brief block在micro block中的位置
enum LOC_BLOCK
{
	LOC_BLOCK_UP			= 0,	///< 上方
	LOC_BLOCK_UPRIGHT		= 1,	///< 右上方
	LOC_BLOCK_RIGHT			= 2,	///< 右方
	LOC_BLOCK_DOWNRIGHT		= 3,	///< 右下方
	LOC_BLOCK_DOWN			= 4,	///< 下方
	LOC_BLOCK_DOWNLEFT		= 5,	///< 左下方
	LOC_BLOCK_LEFT			= 6,	///< 左方
	LOC_BLOCK_UPLEFT		= 7,	///< 左上方
	LOC_BLOCK_FULL			= 8,	///< 占满整个位置
	LOC_BLOCK_MAX			= 9,	///< 表明此类型的最大范围，在程序中使用时表示出错
	LOC_BLOCK_NO_USE		= 9		///< 不使用，在数值上等同于 LOC_BLOCK_MAX ，在程序中表示不使用这个位置
};

///@brief LOC_BLOCK 在bitmap中的映射位，4X4结构
extern const unsigned short LOC_BLOCK_BITMAP_IN_4X4[];


///@brief LOC_BLOCK 在bitmap中的映射位，2X2结构
extern const unsigned char LOC_BLOCK_BITMAP_IN_2X2[];

///@brief Block 实际类型
enum TYPE_BLOCK
{
	TYPE_BLOCK_I		= 0,
	TYPE_BLOCK_B		= 1,
	TYPE_BLOCK_P		= 2,
	TYPE_BLOCK_MAX		= 3,	///< 表明此类型的最大范围
	TYPE_BLOCK_NO_USE	= 3		///< 在程序中使用时表示出错
};

///@brief Block 的形状
enum SHAPE_BLOCK
{
	SHAPE_BLOCK_MB				= 0,
	SHAPE_BLOCK_SUB_MB			= 1,
	SHAPE_BLOCK_SUB_SUB_MB		= 2,
	SHAPE_BLOCK_MAX				= 3,	///< 表明此类型的最大范围
	SHAPE_BLOCK_NO_USE			= 3,	///< 在程序中使用时表示出错
};
#endif // _MVDATA_DEFINES_H_